// Package main 演示GORM删除操作，包括各种删除方法的使用
// 本示例展示了GORM提供的删除API，如Delete、Unscoped等
// 以及如何执行单条删除、批量删除、条件删除和软删除等操作
package main

import (
	"gin-gorm/global"
	"gin-gorm/models"
)

// delete 演示各种删除操作
// 该函数包含了多种GORM删除方法的使用示例
// 包括单条删除、批量删除、条件删除和软删除等
func delete() {
	// 删除单条记录（通过模型实例）
	// 先创建一个包含主键ID的模型实例，然后传递给Delete方法
	// var user = models.UserModel{ID: 10} // 创建包含主键的模型实例
	// global.DB.Delete(&user) // 执行删除操作（默认是软删除）

	// 删除单条记录（通过主键）
	// 直接在Delete方法中指定模型类型和主键ID
	// 这是最简单的单条删除方式，不需要先创建模型实例
	global.DB.Delete(&models.UserModel{}, 9) // 删除ID为9的用户记录（默认是软删除）

	// 条件删除
	// 根据指定条件删除记录，不需要知道具体的主键ID
	// 条件删除会应用到所有匹配条件的记录
	// global.DB.Delete(&models.UserModel{}, "name = ?", "枫枫") // 删除名为"枫枫"的所有用户

	// 批量删除
	// 通过传递主键ID切片进行批量删除
	// 一次性删除多个指定ID的记录
	// global.DB.Delete(&models.UserModel{}, []int{1, 2, 3}) // 批量删除ID为1、2、3的用户

	// 查找被删除的记录（软删除场景）
	// 默认情况下，GORM的查询不会返回软删除的记录
	// 使用Unscoped方法可以查询到所有记录，包括被软删除的
	// global.DB.Unscoped().Find(&user) // 查询所有用户，包括已软删除的

	// 永久删除记录
	// 默认情况下，Delete方法执行的是软删除（如果模型启用了软删除）
	// 使用Unscoped方法可以执行物理删除，彻底从数据库中移除记录
	// 物理删除是不可恢复的，请谨慎使用
	// global.DB.Unscoped().Delete(&user) // 永久删除指定的用户记录

}

// main 程序入口函数
// 初始化数据库连接并调用delete函数执行删除操作
func main() {
	// 初始化数据库连接
	global.Connect()
	// 调用delete函数执行各种删除操作演示
	delete()

}
